package pe.cliente.proyecto.core.service.mant.impl;

import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import pe.adra.core.bean.ComboBean;
import pe.adra.core.bean.FiltroEntidad;
import pe.adra.core.bean.FiltroPaginado;
import pe.adra.core.bean.SuportEntidad;
import pe.adra.core.bean.ValidateResult;
import pe.adra.core.dao.ext.QueryUtil;
import pe.adra.core.parse.TranslateClass;
import pe.adra.core.service.GenericService;
import pe.adra.util.constantes.ConstantesUtil;
import pe.adra.util.exception.DAOException;
import pe.adra.util.exception.ServiceException;
import pe.adra.util.exception.ValidarException;
import pe.cliente.proyecto.core.bean.AsientoBean;
import pe.cliente.proyecto.core.dao.AsientoDAO;
import pe.cliente.proyecto.core.daobase.AsientoDAOBase;
import pe.cliente.proyecto.core.daobase.EstadioDAOBase;
import pe.cliente.proyecto.core.service.mant.AsientoService;
import pe.cliente.proyecto.dominio.Asiento;
import pe.cliente.proyecto.dominio.Estadio;

@Service("AsientoService")
public class AsientoServiceImpl extends GenericService implements AsientoService {

	private static final Logger log = LoggerFactory.getLogger(AsientoServiceImpl.class);

	@Autowired
	private AsientoDAO asientoDAO;

	@Autowired
	private AsientoDAOBase asientoDAOBase;

	// @Autowired
	// private EstadioDAO estadioDAO;

	@Autowired
	private EstadioDAOBase estadioDAOBase;

	public List<AsientoBean> listar(FiltroPaginado filtro) throws ServiceException {
		log.debug("listar");
		try {
			AsientoBean asientoBean = (AsientoBean) filtro.getFiltro();
			Asiento asiento = new Asiento();
			getTranslateClass().translateAt(asientoBean, asiento,TranslateClass.NIVEL_0);
			FiltroEntidad filtroEntidad = filtro.getFiltroEntidad(asiento);
			int count = asientoDAOBase.countListaAsiento(filtroEntidad);
			if (count > ConstantesUtil.NUMBER_0) {
				SuportEntidad[] innerjoin = new SuportEntidad[]{new SuportEntidad(QueryUtil.LEFT_JOIN_FETCH, "est", AsientoDAOBase.ESTADIO_CAMPO_ESTADIO)};
				filtroEntidad.setInnerjoin(innerjoin );
				List<AsientoBean> lst = new ArrayList<AsientoBean>();
				List<Asiento> data = asientoDAOBase.getListaAsiento(filtroEntidad);
				getTranslateClass().translateAtList(Asiento.class, data, AsientoBean.class, lst,TranslateClass.NIVEL_1);
				return lst;
			}
		} catch (DAOException e) {
			log.error("Error en buscar", e);
		}
		return null;
	}

	public void guardar(Asiento bean) throws ServiceException {
		log.debug("guardar");

	}

	public Asiento get(Long id) throws ServiceException {
		log.debug("get:" + id);
		return null;
	}

	public Asiento eliminar(Asiento object) throws ServiceException {
		log.debug("eliminar");
		return null;
	}

	public ValidateResult validar(Asiento object) throws ValidarException {
		log.debug("validar");
		return null;
	}

	@Override
	public List<ComboBean> getListaEstadios() throws ServiceException {
		List<ComboBean> a = new ArrayList<ComboBean>();
		try {
			List<Estadio> lstEs = estadioDAOBase.getCboEstadio();
			ComboBean cbo = null;
			for (Estadio estadio : lstEs) {
				estadio.setAsientos(null);
				cbo = new ComboBean();
				cbo.setKey(String.valueOf(estadio.getId()));
				cbo.setValue(estadio.getNombre());
				a.add(cbo);
			}
			lstEs = null;
		} catch (DAOException e) {
			log.error("Error al listar los estadios cbo", e);
		}
		return a;
	}

	// public List<Asiento> listar(Asiento filtro, Date finit, Date ffin, int
	// inicio, int fin, String strSort, String strOrder, SuportEntidad...
	// innerjoin) throws ServiceException {
	// return null;
	// }
	//
	// public Map<String, Object> listarMap(Asiento filtro, Date finit, Date
	// ffin, int inicio, int fin, int filas, int pagina, String strSort, String
	// strOrder, SuportEntidad... innerjoin) {
	// Map<String, Object> objeto = new HashMap<String, Object>();
	// try {
	// int count = asientoDAOBase.countListaAsiento(filtro, finit, ffin);
	// int total = 0;
	// int records = 0;
	// if (count > 0) {
	// total = count / filas + 1;
	// }
	// List<Asiento> data = asientoDAOBase.getAsientoPorId(filtro, filas *
	// pagina - filas, filas, strSort, strOrder, innerjoin);
	// objeto.put(ConstantesUtil.PAGE, pagina);
	// objeto.put(ConstantesUtil.TOTAL, total);
	// if (ValidateUtil.isNotNull(data)) {
	// records = data.size();
	// } else {
	// objeto.put(ConstantesUtil.LISTA_MENSAJE,
	// coreMessageUtil.getMessage(ConstantesCore.STR_MSG_SIN_RESULTADOS, null));
	// }
	// objeto.put(ConstantesUtil.RECORDS, records);
	// objeto.put(ConstantesUtil.DATA, data);
	// } catch (DAOException e) {
	// log.error("Error en buscar", e);
	// } finally {
	// objeto.put(ConstantesUtil.LISTA_ERROR,
	// coreMessageUtil.getMessage(ConstantesCore.STR_MSG_ERROR, null));
	// }
	// return objeto;
	// }
	//
	// @Transactional
	// public Asiento guardar(Asiento entidad) throws ServiceException{
	// try {
	// asientoDAO.guardar(entidad);
	// return entidad;
	// } catch (DAOException e) {
	// log.error("Error en guardar", e);
	// throw new ServiceException(e);
	// }
	// }
	//
	// public int activo(Asiento entidad) throws ServiceException{
	// try {
	// asientoDAO.guardar(entidad);
	// return ConstantesUtil.NUMBER_1;
	// } catch (DAOException e) {
	// log.error("Error en activo", e);
	// throw new ServiceException(e);
	// }
	// }
	//
	// public Asiento obtener(Long id) throws ServiceException{
	// try {
	// return asientoDAO.get(id);
	// } catch (DAOException e) {
	// log.error("Error en obtener", e);
	// throw new ServiceException(e);
	// }
	// }
	//
	// public void validar(Asiento entidad) throws ValidarException {
	//
	// }

}
